MongoDB তে Aggregation Pipeline একটি শক্তিশালী ফিচার যা আপনাকে ডেটা প্রক্রিয়া করতে এবং বিভিন্ন ধরনের ডেটা ট্রান্সফরমেশন বা অ্যানালাইসিস করতে সহায়তা করে। এটি data aggregation এর জন্য ব্যবহৃত হয়, যেমন ডেটা গ্রুপিং, ফিল্টারিং, সাজানো, মোটকথা একটি ডেটাসেটের ওপর বিভিন্ন ধরণের পরিসংখ্যান বা ট্রান্সফরমেশন প্রয়োগ করা।
MongoDB তে aggregation pipeline ব্যবহার করা হয় aggregation framework এর মাধ্যমে। Aggregation Pipeline এ একাধিক stages থাকে, যেখানে প্রতিটি stage ডেটার ওপর একটি নির্দিষ্ট কার্যকলাপ সম্পন্ন করে এবং পরবর্তী stage-এ সেই ফলাফল পাস করা হয়। এটি MongoDB তে ডেটা অপারেশনগুলোকে অপারেশন চেইনিং এর মাধ্যমে খুবই কার্যকরী এবং দ্রুত করতে সাহায্য করে।
Aggregation Pipeline এর মূল ধারণা:
- Pipeline: Aggregation Pipeline MongoDB-তে বিভিন্ন stages এর মাধ্যমে ডেটা প্রক্রিয়া করে। প্রতিটি stage একটি নির্দিষ্ট কাজ করে (যেমন ফিল্টার করা, গ্রুপ করা, সাজানো) এবং পরবর্তী stage-এ সেই ফলাফল পাঠানো হয়।
- Stages: MongoDB Aggregation Pipeline এ বিভিন্ন ধরনের stages ব্যবহার করা হয়, যেগুলি ডেটাকে বিভিন্ন উপায়ে প্রক্রিয়া করে। কিছু সাধারণ stage হল:
- $match: ডেটাকে ফিল্টার করতে ব্যবহৃত হয়, অর্থাৎ নির্দিষ্ট শর্ত পূরণ করে এমন ডকুমেন্টগুলো নির্বাচন করা।
- $group: ডেটাকে গ্রুপ করার জন্য ব্যবহৃত হয়, যা একটি নির্দিষ্ট ফিল্ডের ভিত্তিতে ডকুমেন্টগুলো গ্রুপ করে এবং গণনা বা পরিসংখ্যান তৈরি করে।
- $project: ডেটাকে নতুন ফিল্ড, বা প্রকার সহ পরিবর্তন করতে ব্যবহৃত হয়, যেমন কিছু ফিল্ড বাদ দেওয়া বা নতুন ফিল্ড যোগ করা।
- $sort: ডেটা সাজানোর জন্য ব্যবহৃত হয়।
- $limit: ডেটা সীমাবদ্ধ করার জন্য ব্যবহৃত হয়।
- $skip: কিছু ডেটা বাদ দিয়ে পরবর্তী ডেটা আনা হয়।
Aggregation Pipeline Example in MongoDB:
ধরা যাক, আমাদের একটি "orders" নামে collection রয়েছে যেখানে বিভিন্ন order সংরক্ষিত থাকে, এবং আমরা এই collection থেকে কিছু specific aggregation operation করতে চাই।
Collection Structure:
{
"_id": ObjectId("..."),
"orderId": 101,
"customerName": "John Doe",
"amount": 500,
"status": "Completed",
"date": "2023-12-01"
}
1. Filter Orders by Status and Calculate Total Amount:
এখানে আমরা orders collection থেকে status = "Completed" এমন সমস্ত অর্ডার ফিল্টার করে তাদের মোট পরিমাণ (amount) যোগ করতে চাই।
import com.mongodb.MongoClient;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.Arrays;
public class AggregationExample {
public static void main(String[] args) {
// MongoDB কানেকশন তৈরি
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("orders");
// Aggregation pipeline তৈরি
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
// Step 1: $match stage - status "Completed" এর অর্ডারগুলো ফিল্টার করা
new Document("$match", new Document("status", "Completed")),
// Step 2: $group stage - মোট amount হিসাব করা
new Document("$group", new Document("_id", null)
.append("totalAmount", new Document("$sum", "$amount")))
));
// Result প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
Aggregation Pipeline ব্যাখ্যা:
- $match: প্রথম stage তে আমরা status = "Completed" অর্ডারগুলো ফিল্টার করেছি।
- $group: দ্বিতীয় stage তে,
$sumঅপারেটরের মাধ্যমে ফিল্টার করা ডেটার amount ফিল্ডের মোট পরিমাণ যোগ করা হয়েছে।
এখানে, যদি status = "Completed" অর্ডারের মোট পরিমাণ 5000 হয়, তাহলে আউটপুট হবে:
{ "_id" : null, "totalAmount" : 5000 }
2. Group Orders by Customer and Calculate Total Amount per Customer:
এখন, আমরা চাই যে সমস্ত অর্ডারগুলোকে গ্রুপ করা হোক customerName এর ভিত্তিতে এবং প্রতিটি গ্রুপের মোট পরিমাণ হিসাব করা হোক।
import com.mongodb.MongoClient;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.Arrays;
public class GroupByCustomerExample {
public static void main(String[] args) {
// MongoDB কানেকশন তৈরি
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("orders");
// Aggregation pipeline তৈরি
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
// Step 1: $group stage - customerName ভিত্তিতে গ্রুপ করা এবং তাদের মোট amount যোগ করা
new Document("$group", new Document("_id", "$customerName")
.append("totalAmount", new Document("$sum", "$amount")))
));
// Result প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
Aggregation Pipeline ব্যাখ্যা:
- $group: গ্রুপিং করার সময়, আমরা customerName অনুযায়ী গ্রুপ করছি এবং প্রতিটি গ্রুপের জন্য মোট amount গণনা করছি।
এখানে, যদি দুইজন John Doe এবং Alice এর অর্ডার থাকে, তাদের মোট পরিমাণ গণনা হবে এবং আউটপুট হবে:
{ "_id" : "John Doe", "totalAmount" : 1500 }
{ "_id" : "Alice", "totalAmount" : 700 }
3. Sort Orders by Amount:
এখন, আমরা অর্ডারগুলোকে তাদের amount অনুযায়ী সাজাতে চাই। এটি করার জন্য $sort stage ব্যবহার করা হয়।
import com.mongodb.MongoClient;
import com.mongodb.client.AggregateIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import java.util.Arrays;
public class SortOrdersExample {
public static void main(String[] args) {
// MongoDB কানেকশন তৈরি
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("orders");
// Aggregation pipeline তৈরি
AggregateIterable<Document> result = collection.aggregate(Arrays.asList(
// Step 1: $sort stage - amount অনুযায়ী সাজানো
new Document("$sort", new Document("amount", -1)) // -1 for descending order
));
// Result প্রিন্ট করা
for (Document doc : result) {
System.out.println(doc.toJson());
}
mongoClient.close();
}
}
Aggregation Pipeline ব্যাখ্যা:
- $sort: এই stage তে আমরা amount ফিল্ড অনুযায়ী সাজাচ্ছি,
-1মানে ডেসেন্ডিং অর্ডারে (বড় থেকে ছোট) সাজানো।
Aggregation Pipeline Summary:
MongoDB তে Aggregation Pipeline এর মাধ্যমে ডেটাকে একাধিক stage এর মাধ্যমে প্রক্রিয়া করা হয়। সাধারণত ব্যবহৃত কিছু stage হল:
- $match: ডেটাকে ফিল্টার করার জন্য ব্যবহৃত হয়।
- $group: ডেটাকে গ্রুপ করার জন্য এবং গণনা, গড়, সর্বাধিক/সর্বনিম্ন মান বের করার জন্য ব্যবহৃত হয়।
- $sort: ডেটা সাজানোর জন্য।
- $project: ডেটা পরিবর্তন বা নির্বাচিত ফিল্ডে কাজ করার জন্য।
- $limit: কিছু ডেটা সীমাবদ্ধ করার জন্য।
- $skip: কিছু ডেটা বাদ দিয়ে পরবর্তী ডেটা আনা।
MongoDB তে Aggregation Pipeline একটি শক্তিশালী উপকরণ যা বিভিন্ন ডেটা ট্রান্সফরমেশন ও অ্যানালাইসিস কার্যক্রম করতে ব্যবহৃত হয়। বিভিন্ন stages ব্যবহার করে আপনি ডেটাকে ফিল্টার, গ্রুপ, সাজানো, পরিবর্তন ইত্যাদি কাজ করতে পারেন। Java তে MongoDB এর Aggregation Pipeline এর সাহায্যে আপনি সহজে এবং কার্যকরীভাবে ডেটা প্রক্রিয়া করতে পারেন।
Read more